#include "registerwin.h"
#include "ui_registerwin.h"
#include <QDebug>
Registerwin::Registerwin(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Registerwin)
{
    ui->setupUi(this);
}

Registerwin::~Registerwin()
{
    delete ui;
}

void Registerwin::on_resetpb_clicked()
{
     ui->name->clear();  //清除名字框
     ui->addr->clear();  //清除地址框
     ui->phone->clear(); //清除电话号码框
     ui->dir->clear();   //清除照片路径 框
     ui->date->setDate(QDate::currentDate());//这 里的日期框不能清除，只能将其设置为当前时间
     ui->place->clear();//清除  部门

}

void Registerwin::on_addpicpb_clicked()
{

    QString filepath=QFileDialog::getOpenFileName(this);//获取图片路径
    ui->dir->setText(filepath);//将路径显示在dir  编辑框上


    //显示图片
    QPixmap pix;
    //pix=pix.scaled();
    ui->picshow->setPixmap(filepath);
}

void Registerwin::on_rigisterpb_clicked()
{

   //1.通过照片，结合qobjectface模块得到faceid

    cv::Mat image=cv::imread(ui->dir->text().toUtf8().data());//获取路径头像
     int  faceid=object.face_register(image);//获取到头像注册后的 faceid
      qDebug()<<faceid;
    QString headfile=QString("./data/%1.jpg").arg(QString(ui->name->text().toUtf8().toBase64()));//获取到保存路径
    cv::imwrite(headfile.toUtf8().data(),image);//将图片写进上面路径下

    //2.将个人信息存储到 数据库employee
    QSqlTableModel  model;
    model.setTable("employee");//设置要插入的表名
    QSqlRecord record=model.record();//record作为表模型的记录
    // 设置数据进记录
     record.setValue("name",ui->name->text());
     record.setValue("sex",ui->sexm->isChecked()?"男":"女");
     record.setValue("birthday",ui->date->text());
     record.setValue("address",ui->addr->text());
     record.setValue("phone",ui->phone->text());
     record.setValue("faceID",faceid);
     record.setValue("headfile",headfile);
     record.setValue("department",ui->place->text());

      //把记录插入到数据库表格中
      bool ret=model.insertRecord(0,record);
      if(ret)
      {
          QMessageBox::information(this,"提示","注册成功");
          model.submitAll();//成功进行提交， 数据库中可以查看到
      }
      else
       {
           QMessageBox::information(this,"提示","注册失败");
       }


}

void Registerwin::timerEvent(QTimerEvent *e)
{



     cap>>image;//获取摄像头一帧图片
     if(image.data==nullptr)return ; //没读到视频数据

     cv::Mat  srcimage;
     // 把opencv里面的Mat格式数据（BGR）转化为qt中的Qimage(RGB)
     cvtColor(image,srcimage,cv::COLOR_BGR2RGB);//转化为rgb
     QImage ttimage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.step1(),QImage::Format_RGB888);//利用rgb格式图片构造QImage
     QPixmap mp=QPixmap::fromImage(ttimage);//将QImage转化为QPixmap用来显示
     ui->picshow->setPixmap(mp);//给标签设置一帧视频数据图片

}








void Registerwin::on_opencmrpb_clicked()
{
    if(ui->opencmrpb->text()=="打开摄像头")
    {     if(cap.open(0))
          {    ui->opencmrpb->setText("关闭摄像头");
            id=startTimer(100);//打开定时器100ms
          }



    }
   else
    {

        ui->opencmrpb->setText("打开摄像头");

        killTimer(id);//关闭定时器
        ui->picshow->clear();//显示图片的地方需要清除掉
        cap.release();//关闭摄像头
    }
}

void Registerwin::on_takephotospb_clicked()
{

    QString headfile=QString("./data/%1.jpg").arg(QString(ui->name->text().toUtf8().toBase64()));//获取到保存路径
    cv::imwrite(headfile.toUtf8().data(),image);//将图片写进上面路径下
    ui->dir->setText(headfile);
    ui->opencmrpb->setText("打开摄像头");
    killTimer(id);//关闭定时器
    //ui->picshow->clear();//显示图片的地方需要清除掉
    cap.release();//关闭摄像头

}
